﻿Imports System.Data.OleDb
Imports DataTable = System.Data.DataTable
Public Class E2_モデルデータ設定F
    'このフォームは、
    '1.モデルデータ条件設定
    '2.T250_進行テーブル作成
    '3.T500_データモデルテーブル作成（空のテーブル）

#Region "画面操作"
    ' ========================================
    ' フォームロード
    ' ========================================
    Private Sub モデルデータ設定F_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        著作L.Text = 著作
        フォルダー確認()

        Dim データ抽出区分 As String = ""
        Dim ETable As String = ""
        Dim ITable As String = ""
        Dim ランクキー As String = ""
        Dim キー As String = ""

        If ケース単位出荷Rb.Checked = True Then
            データ抽出区分 = "ケース単位出荷"
            ETable = "T150_C単位出荷E集計"
            ITable = "T150_C単位出荷I集計"
            ランクキー = "B行"
            キーLabel.Text = "行数"
        End If
        If バラ単位出荷Rb.Checked = True Then
            データ抽出区分 = "バラ単位出荷"
            ETable = "T150_B単位出荷E集計"
            ITable = "T150_B単位出荷I集計"
            ランクキー = "Cケ"
            キーLabel.Text = "ケ-ス数"
        End If
        If 全出荷Rb.Checked = True Then
            データ抽出区分 = "全出荷"
            ETable = "T160_全出荷E集計"
            ITable = "T160_全出荷I集計"
            ランクキー = "GPL"
            キーLabel.Text = "PL数"
        End If

        '集計から'テキスト表示まで
        ベースE数Count(ETable)
        ベースI数Count(ITable)
        ベースキー数集計(ランクキー)


        レコードピッチChk1 = 0 : モデルレコード数Chk1 = 0
        レコードピッチChk2 = 0 : モデルレコード数Chk2 = 0

        ベースE数 = CInt(ベースE数Tb.Text)
        Min出荷先数 = CInt(ベースE数 * 0.5) : Min出荷先数Tb.Text = CStr(Min出荷先数)
        Max出荷先数 = CInt(ベースE数 * 1.5) : Max出荷先数Tb.Text = CStr(Max出荷先数)

        ベースI数 = CInt(ベースI数Tb.Text)
        Minアイテム数 = CInt(ベースI数 * 0.5) : Minアイテム数Tb.Text = CStr(Minアイテム数)
        Maxアイテム数 = CInt(ベースI数 * 1.5) : Maxアイテム数Tb.Text = CStr(Maxアイテム数)

        E計算範囲 = Max出荷先数 - Min出荷先数
        I計算範囲 = Maxアイテム数 - Minアイテム数

        '計算計算条件 1
        E計算回数1 = CInt(E計算回数1Tb.Text)
        I計算回数1 = CInt(I計算回数1Tb.Text)

        全計算回数1Tb.Text = CStr(E計算回数1 * I計算回数1)
        Eレコードピッチ1 = CInt(E計算範囲 / E計算回数1) : Eレコードピッチ1Tb.Text = CStr(Eレコードピッチ1)
        Iレコードピッチ1 = CInt(I計算範囲 / I計算回数1) : Iレコードピッチ1Tb.Text = CStr(Iレコードピッチ1)

        '計算計算条件 2
        E計算回数2 = CInt(E計算回数2Tb.Text)
        I計算回数2 = CInt(I計算回数2Tb.Text)
        全計算回数2Tb.Text = CStr(E計算回数2 * I計算回数2)
        Eレコードピッチ2 = CInt(E計算範囲 / E計算回数2) : Eレコードピッチ2Tb.Text = CStr(Eレコードピッチ2)
        Iレコードピッチ2 = CInt(I計算範囲 / I計算回数2) : Iレコードピッチ2Tb.Text = CStr(Iレコードピッチ2)
        'T250_進行テーブルの存在を確認し、存在する場合は表示
        T250_進行の有れば表示()

        'MYDATA2作成
        My_DATA2作成()

        レコードピッチChk1 = 1 : モデルレコード数Chk1 = 1
        レコードピッチChk2 = 1 : モデルレコード数Chk2 = 1

        画面Chk = 1

    End Sub

    Private Sub T250_進行の有れば表示()
        ' Access (OleDb) 接続文字列を設定
        Dim connStr As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & MyDB
        Dim targetTable As String = "T250_進行"

        Using conn As New OleDbConnection(connStr)
            Try
                conn.Open()

                ' テーブル一覧を取得して該当テーブルが存在するか確認
                Dim schema As DataTable = conn.GetSchema("Tables")
                Dim exists As Boolean = False
                For Each row As DataRow In schema.Rows
                    Dim tblName As String = CStr(row("TABLE_NAME"))
                    If String.Compare(tblName, targetTable, True) = 0 Then
                        exists = True
                        Exit For
                    End If
                Next

                If exists Then
                    ' テーブルがある場合のみDgvに表示
                    Dim selectSql As String = "SELECT * FROM [" & targetTable & "]"
                    Dim adapter As New OleDbDataAdapter(selectSql, conn)
                    Dim dt As New DataTable()
                    adapter.Fill(dt)
                    T250_進行Dgv.DataSource = dt

                    T250_進行Dgv.RowHeadersVisible = False                    '行ヘッダーを非表示に設定
                    T250_進行Dgv.AllowUserToAddRows = False                   '最下部の新しい行を非表示にする
                    T250_進行Dgv.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells  'ヘッダーとすべてのセルの内容に合わせて、列の幅を自動調整する
                    T250_進行Dgv.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells        'ヘッダーとすべてのセルの内容に合わせて、行の高さを自動調整する
                    For i As Integer = 0 To T250_進行Dgv.Columns.Count - 1
                        T250_進行Dgv.Columns(i).DefaultCellStyle.Alignment = DataGridViewContentAlignment.BottomRight
                    Next
                End If

            Catch ex As Exception
                MessageBox.Show("エラーが発生しました: " & ex.Message)
            End Try
        End Using
    End Sub
    Private Sub モデルデータ初期化Bt_Click(sender As Object, e As EventArgs) Handles モデルデータ初期化Bt.Click
        '1.T250_進行テーブルの存在を確認
        Dim result As Boolean
        Dim tableName As String
        Dim answer As MsgBoxResult

        tableName = "T250_進行" ' 検索したいテーブル名
        ' 関数を呼び出して戻り値を受け取る
        result = Search_Table(tableName)

        ' 結果に応じて処理を分岐
        If result Then
            '2.存在する場合はYesNo確認後、削除
            ' vbYesNo でボタンを指定し、vbQuestion でアイコンを疑問符にします
            answer = MsgBox(tableName & " が見つかりました。処理を続けますか？", vbYesNo + vbQuestion, "確認")
            If answer = vbYes Then
                ' 「はい」を押した時の処理
                DEL_table("T250*")
                T250_進行新規作成()
            Else
                ' 「いいえ」を押した時の処理
                Exit Sub
            End If
        Else
            '3.新規T250_進行テーブル作成
            T250_進行新規作成()
        End If

        If 計算条件1Rb.Checked = True Then
            計算条件1のレコード作成()
            全計算回数 = 全計算回数1
        End If
        If 計算条件2Rb.Checked = True Then
            計算条件2のレコード作成()
            全計算回数 = 全計算回数2
        End If

        If 計算条件3Rb.Checked = True Then
            計算条件1のレコード作成()
            計算条件2のレコード作成()
            全計算回数 = 全計算回数1 + 全計算回数2
        End If

        'My_DATA2作成
        Dim データ抽出区分 As String = ""
        Dim ETable As String = ""
        Dim ITable As String = ""
        Dim ランクキー As String = ""
        Dim キーLabelText As String = ""

        If ケース単位出荷Rb.Checked = True Then
            データ抽出区分 = "ケース単位出荷"
            ETable = "T150_C単位出荷E集計"
            ITable = "T150_C単位出荷I集計"
            ランクキー = "B行"
            キーLabelText = "行数"
        End If
        If バラ単位出荷Rb.Checked = True Then
            データ抽出区分 = "バラ単位出荷"
            ETable = "T150_B単位出荷E集計"
            ITable = "T150_B単位出荷I集計"
            ランクキー = "Cケ"
            キーLabelText = "ケ-ス数"
        End If
        If 全出荷Rb.Checked = True Then
            データ抽出区分 = "全出荷"
            ETable = "T160_全出荷E集計"
            ITable = "T160_全出荷I集計"
            ランクキー = "GPL"
            キーLabelText = "PL数"
        End If

        ベースE数 = CInt(ベースE数Tb.Text) : Min出荷先数 = CInt(Min出荷先数Tb.Text) : Max出荷先数 = CInt(Max出荷先数Tb.Text)
        ベースI数 = CInt(ベースE数Tb.Text) : Minアイテム数 = CInt(Minアイテム数Tb.Text) : Maxアイテム数 = CInt(Maxアイテム数Tb.Text)
        My_DATA2作成()
        My_DATA2更新（データ抽出区分, ETable, ITable, ランクキー, キーLabelText, ベースE数, Min出荷先数, Max出荷先数, ベースI数, Minアイテム数, Maxアイテム数）


        T250_進行の有れば表示()
        T500_データモデルテーブル作成()
        T300_E乱数(ETable)
        T300_I乱数(ITable)
    End Sub

#Region "__計算条件１・２の計算回数を変更した際の処理"

    Private Sub 計算条件1再計算Bt_Click(sender As Object, e As EventArgs) Handles 計算条件1再計算Bt.Click
        E計算回数1 = CInt(E計算回数1Tb.Text)
        I計算回数1 = CInt(I計算回数1Tb.Text)
        全計算回数1Tb.Text = CStr(E計算回数1 * I計算回数1)

        Eレコードピッチ1 = E計算範囲 / E計算回数1 : Eレコードピッチ1Tb.Text = CStr(Eレコードピッチ1)
        Iレコードピッチ1 = I計算範囲 / I計算回数1 : Iレコードピッチ1Tb.Text = CStr(Iレコードピッチ1)
    End Sub

    Private Sub 計算条件2再計算Bt_Click(sender As Object, e As EventArgs) Handles 計算条件2再計算Bt.Click
        E計算回数2 = CInt(E計算回数2Tb.Text)
        I計算回数2 = CInt(I計算回数2Tb.Text)
        全計算回数2Tb.Text = CStr(E計算回数2 * I計算回数2)

        Eレコードピッチ2 = E計算範囲 / E計算回数2 : Eレコードピッチ2Tb.Text = CStr(Eレコードピッチ2)
        Iレコードピッチ2 = I計算範囲 / I計算回数2 : Iレコードピッチ2Tb.Text = CStr(Iレコードピッチ2)

    End Sub

#End Region

    Private Sub E2_閉じるBt_Click(sender As Object, e As EventArgs) Handles E2_閉じるBt.Click
        Me.Close()
    End Sub
#End Region

#Region "ベースEIQ計算"


    Public Sub ベースE数Count(ETable As String)
        ' 1. 接続文字列の設定（パスは環境に合わせて変更してください）
        Dim connStr As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & MyDB

        ' 2. SQLクエリの設定
        ' 出荷先をグループ化して、そのグループがいくつあるか（ユニーク数）をカウントします
        Dim sql As String = "SELECT COUNT(*) FROM (SELECT 出荷先 FROM " & ETable & " GROUP BY 出荷先)"

        Using conn As New OleDbConnection(connStr)
            Try
                Dim cmd As New OleDbCommand(sql, conn)
                conn.Open()

                ' 3. 実行して結果を取得（単一の値なのでExecuteScalarを使用）
                Dim count As Integer = Convert.ToInt32(cmd.ExecuteScalar())

                ' 4. テキストボックスに代入（UIスレッドで実行）
                ベースE数Tb.Text = count.ToString()
                ベースE数 = count

            Catch ex As Exception
                MessageBox.Show("エラーが発生しました: " & ex.Message)
            End Try
        End Using
    End Sub
    Public Sub ベースI数Count(ITable As String)
        ' 1. 接続文字列の設定（パスは環境に合わせて変更してください）
        Dim connStr As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & MyDB

        ' 2. SQLクエリの設定
        ' アイテムをグループ化して、そのグループがいくつあるか（ユニーク数）をカウントします
        Dim sql As String = "SELECT COUNT(*) FROM (SELECT アイテム FROM " & ITable & " GROUP BY アイテム)"

        Using conn As New OleDbConnection(connStr)
            Try
                Dim cmd As New OleDbCommand(sql, conn)
                conn.Open()

                ' 3. 実行して結果を取得（単一の値なのでExecuteScalarを使用）
                Dim count As Integer = Convert.ToInt32(cmd.ExecuteScalar())

                ' 4. テキストボックスに代入（UIスレッドで実行）
                ベースI数Tb.Text = count.ToString()
                ベースI数 = count

            Catch ex As Exception
                MessageBox.Show("エラーが発生しました: " & ex.Message)
            End Try
        End Using
    End Sub
    Public Sub ベースキー数集計(ランクキー As String)
        ' 1. 接続文字列（データベースの場所を指定）
        Dim connStr As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & MyDB

        ' 2. SQLクエリ（バラ数列の合計を算出）
        ' Nz関数を使うと、もしデータが0件（Null）でもエラーにならず0を返せます
        Dim sql As String = "SELECT SUM(" & ランクキー & ") FROM T200"

        Using conn As New OleDbConnection(connStr)
            Try
                Dim cmd As New OleDbCommand(sql, conn)
                conn.Open()

                ' 3. 実行（ExecuteScalarで単一の結果を取得）
                Dim result = cmd.ExecuteScalar()

                ' 4. 結果の判定と代入
                ' データが全くない場合はDBNullが返るため、チェックを行います
                If result IsNot DBNull.Value AndAlso result IsNot Nothing Then
                    ベースキー数Tb.Text = CStr(CInt(result))
                Else
                    ベースキー数Tb.Text = "0"
                End If

            Catch ex As Exception
                MessageBox.Show("集計エラー: " & ex.Message)
            End Try
        End Using
    End Sub
#End Region

#Region "T250_進行作成  "
    Private Sub T250_進行新規作成()
        Try
            Dim connStr As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & MyDB
            Using conn As New OleDbConnection(connStr)
                conn.Open()

                ' T250_進行テーブルを作成
                Dim createT300Sql As String = "CREATE TABLE T250_進行 (" _
                    & "進行連番 AUTOINCREMENT PRIMARY KEY, " _
                    & "計算条件 INTEGER, " _
                    & "作成Chk TEXT(10), " _
                    & "計算E数 INTEGER, " _
                    & "計算I数 INTEGER, " _
                    & "E採用判定値 DOUBLE, " _
                    & "I採用判定値 DOUBLE)"

                Using cmdCreateT300 As New OleDbCommand(createT300Sql, conn)
                    cmdCreateT300.ExecuteNonQuery()
                End Using
            End Using
        Catch ex As Exception
            MsgBox($"T250_進行作成エラー: {ex.Message}", MsgBoxStyle.Critical, "エラー")
        End Try
    End Sub

    Private Function MinBaseMax補間値(stepIndex As Integer, stepCount As Integer, minValue As Integer, baseValue As Integer, maxValue As Integer) As Integer
        Dim baseClamped As Integer = Math.Min(Math.Max(baseValue, minValue), maxValue)
        If stepCount <= 1 Then
            Return baseClamped
        End If

        Dim pos As Double = CDbl(stepIndex) / CDbl(stepCount - 1)
        Dim value As Double

        If pos <= 0.5 Then
            value = minValue + (baseClamped - minValue) * (pos / 0.5)
        Else
            value = baseClamped + (maxValue - baseClamped) * ((pos - 0.5) / 0.5)
        End If

        Dim rounded As Integer = CInt(Math.Round(value))
        Return Math.Min(Math.Max(rounded, minValue), maxValue)
    End Function

    Private Sub 計算条件1のレコード作成()

        '  計算条件1のレコード作成
        Try
            Dim connStr As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & MyDB
            Using conn As New OleDbConnection(connStr)
                conn.Open()

                Dim P As Integer = 0
                ' 安全に値を取得（TextBox から取得する想定）

                P = 1
                Dim minE As Integer = CInt(Min出荷先数Tb.Text)
                Dim maxE As Integer = CInt(Max出荷先数Tb.Text)
                Dim minI As Integer = CInt(Minアイテム数Tb.Text)
                Dim maxI As Integer = CInt(Maxアイテム数Tb.Text)
                Dim baseE As Integer = CInt(ベースE数Tb.Text)
                Dim baseI As Integer = CInt(ベースI数Tb.Text)

                Dim insertT300Sql As String = "INSERT INTO T250_進行 (計算条件, 作成Chk, 計算E数, 計算I数, E採用判定値, I採用判定値) VALUES (?, ?, ?, ?, ?, ?)"

                Using cmdInsertT300 As New OleDbCommand(insertT300Sql, conn)
                    cmdInsertT300.Parameters.Add("@計算条件", OleDbType.Integer)
                    cmdInsertT300.Parameters.Add("@作成Chk", OleDbType.VarChar, 10)
                    cmdInsertT300.Parameters.Add("@計算E数", OleDbType.Integer)
                    cmdInsertT300.Parameters.Add("@計算I数", OleDbType.Integer)
                    cmdInsertT300.Parameters.Add("@E採用判定値", OleDbType.Double)
                    cmdInsertT300.Parameters.Add("@I採用判定値", OleDbType.Double)

                    Dim E, Ec, I, Ic As Integer
                    '  計算条件1 のレコード作成
                    全計算回数1 = E計算回数1 * I計算回数1
                    For Ec = 0 To E計算回数1 - 1
                        E = MinBaseMax補間値(Ec, E計算回数1, minE, baseE, maxE)
                        For Ic = 0 To I計算回数1 - 1
                            I = MinBaseMax補間値(Ic, I計算回数1, minI, baseI, maxI)
                            Dim E採用判定値 As Double = If(baseE <> 0, CDbl(E) / CDbl(baseE), 0)
                            Dim I採用判定値 As Double = If(baseI <> 0, CDbl(I) / CDbl(baseI), 0)

                            cmdInsertT300.Parameters("@計算条件").Value = 1
                            cmdInsertT300.Parameters("@作成Chk").Value = DBNull.Value
                            cmdInsertT300.Parameters("@計算E数").Value = E
                            cmdInsertT300.Parameters("@計算I数").Value = I
                            cmdInsertT300.Parameters("@E採用判定値").Value = E採用判定値
                            cmdInsertT300.Parameters("@I採用判定値").Value = I採用判定値

                            cmdInsertT300.ExecuteNonQuery()
                        Next
                    Next
                    進行状況1Tb.Text = "100% 計算条件1でT300 作成 完了"
                End Using
            End Using
        Catch ex As Exception
            MsgBox($"T250_進行作成エラー: {ex.Message}", MsgBoxStyle.Critical, "エラー")
        End Try
    End Sub
    Private Sub 計算条件2のレコード作成()
        '  計算条件2 のレコード作成
        Dim P As Integer = 0
        Try
            Dim connStr As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & MyDB
            Using conn As New OleDbConnection(connStr)
                conn.Open()

                ' 安全に値を取得（TextBox から取得する想定）

                P = 1
                Dim minE As Integer = CInt(Min出荷先数Tb.Text)
                Dim maxE As Integer = CInt(Max出荷先数Tb.Text)
                Dim minI As Integer = CInt(Minアイテム数Tb.Text)
                Dim maxI As Integer = CInt(Maxアイテム数Tb.Text)
                Dim baseE As Integer = CInt(ベースE数Tb.Text)
                Dim baseI As Integer = CInt(ベースI数Tb.Text)

                Dim IPitch2 As Double = CDbl(Iレコードピッチ2Tb.Text)
                Dim insertT300Sql As String = "INSERT INTO T250_進行 (計算条件, 作成Chk, 計算E数, 計算I数, E採用判定値, I採用判定値) VALUES (?, ?, ?, ?, ?, ?)"

                Using cmdInsertT300 As New OleDbCommand(insertT300Sql, conn)
                    cmdInsertT300.Parameters.Add("@計算条件", OleDbType.Integer)
                    cmdInsertT300.Parameters.Add("@作成Chk", OleDbType.VarChar, 10)
                    cmdInsertT300.Parameters.Add("@計算E数", OleDbType.Integer)
                    cmdInsertT300.Parameters.Add("@計算I数", OleDbType.Integer)
                    cmdInsertT300.Parameters.Add("@E採用判定値", OleDbType.Double)
                    cmdInsertT300.Parameters.Add("@I採用判定値", OleDbType.Double)

                    Dim E, Ec, I, Ic As Integer
                    全計算回数2 = E計算回数2 * I計算回数2
                    For Ec = 0 To E計算回数2 - 1
                        E = MinBaseMax補間値(Ec, E計算回数2, minE, baseE, maxE)

                        Dim I基準 As Integer
                        If E <= baseE Then
                            Dim ratioLow As Double = If(baseE <> minE, CDbl(E - minE) / CDbl(baseE - minE), 1)
                            I基準 = CInt(Math.Round(minI + (baseI - minI) * ratioLow))
                        Else
                            Dim ratioHigh As Double = If(maxE <> baseE, CDbl(E - baseE) / CDbl(maxE - baseE), 1)
                            I基準 = CInt(Math.Round(baseI + (maxI - baseI) * ratioHigh))
                        End If
                        I基準 = Math.Min(Math.Max(I基準, minI), maxI)

                        For Ic = 0 To I計算回数2 - 1
                            Dim offset As Double = 0
                            If I計算回数2 > 1 Then
                                offset = (Ic - (I計算回数2 - 1) / 2.0) * (IPitch2 / 10.0)
                            End If
                            I = CInt(Math.Round(I基準 + offset))
                            I = Math.Min(Math.Max(I, minI), maxI)

                            Dim E採用判定値 As Double = If(baseE <> 0, CDbl(E) / CDbl(baseE), 0)
                            Dim I採用判定値 As Double = If(baseI <> 0, CDbl(I) / CDbl(baseI), 0)

                            cmdInsertT300.Parameters("@計算条件").Value = 2
                            cmdInsertT300.Parameters("@作成Chk").Value = DBNull.Value
                            cmdInsertT300.Parameters("@計算E数").Value = E
                            cmdInsertT300.Parameters("@計算I数").Value = I
                            cmdInsertT300.Parameters("@E採用判定値").Value = E採用判定値
                            cmdInsertT300.Parameters("@I採用判定値").Value = I採用判定値

                            cmdInsertT300.ExecuteNonQuery()
                        Next
                    Next
                End Using
            End Using

            進行状況2Tb.Text = "100% 計算条件2でT300 作成 完了"
            '進行状況2Tb.BackColor = Color.LightGreen : Refresh()

        Catch ex As Exception
            MsgBox($"T250_進行作成エラー: {ex.Message}", MsgBoxStyle.Critical, "エラー")
        End Try
    End Sub

#End Region
    Private Sub T500_データモデルテーブル作成()
        'T500_データモデルテーブルを削除
        DEL_table("T500*")

        'T500_データモデルテーブルを再作成
        Dim connStr As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & MyDB
        Using conn As New OleDbConnection(connStr)
            conn.Open()
            Dim createT500Sql As String = "CREATE TABLE T500_データモデル (" &
            "モデル連番 INTEGER PRIMARY KEY, " &
            "出荷先数 DOUBLE, " &
            "アイテム数 DOUBLE, " &
            "バラ数量 DOUBLE, " &
            "行数 DOUBLE, " &
            "E1 DOUBLE, E2 DOUBLE, E3 DOUBLE, E4 DOUBLE, E5 DOUBLE, " &
            "I1 DOUBLE, I2 DOUBLE, I3 DOUBLE, I4 DOUBLE, I5 DOUBLE, " &
            "行数01 DOUBLE, 行数02 DOUBLE, 行数03 DOUBLE, 行数04 DOUBLE, 行数05 DOUBLE, " &
            "行数06 DOUBLE, 行数07 DOUBLE, 行数08 DOUBLE, 行数09 DOUBLE, 行数10 DOUBLE, " &
            "行数11 DOUBLE, 行数12 DOUBLE, 行数13 DOUBLE, 行数14 DOUBLE, 行数15 DOUBLE, " &
            "行数16 DOUBLE, 行数17 DOUBLE, 行数18 DOUBLE, 行数19 DOUBLE, 行数20 DOUBLE, " &
            "行数21 DOUBLE, 行数22 DOUBLE, 行数23 DOUBLE, 行数24 DOUBLE, 行数25 DOUBLE, " &
            "バラ数01 DOUBLE, バラ数02 DOUBLE, バラ数03 DOUBLE, バラ数04 DOUBLE, バラ数05 DOUBLE, " &
            "バラ数06 DOUBLE, バラ数07 DOUBLE, バラ数08 DOUBLE, バラ数09 DOUBLE, バラ数10 DOUBLE, " &
            "バラ数11 DOUBLE, バラ数12 DOUBLE, バラ数13 DOUBLE, バラ数14 DOUBLE, バラ数15 DOUBLE, " &
            "バラ数16 DOUBLE, バラ数17 DOUBLE, バラ数18 DOUBLE, バラ数19 DOUBLE, バラ数20 DOUBLE, " &
            "バラ数21 DOUBLE, バラ数22 DOUBLE, バラ数23 DOUBLE, バラ数24 DOUBLE, バラ数25 DOUBLE, " &
            "ケース01 DOUBLE, ケース02 DOUBLE, ケース03 DOUBLE, ケース04 DOUBLE, ケース05 DOUBLE, " &
            "ケース06 DOUBLE, ケース07 DOUBLE, ケース08 DOUBLE, ケース09 DOUBLE, ケース10 DOUBLE, " &
            "ケース11 DOUBLE, ケース12 DOUBLE, ケース13 DOUBLE, ケース14 DOUBLE, ケース15 DOUBLE, " &
            "ケース16 DOUBLE, ケース17 DOUBLE, ケース18 DOUBLE, ケース19 DOUBLE, ケース20 DOUBLE, " &
            "ケース21 DOUBLE, ケース22 DOUBLE, ケース23 DOUBLE, ケース24 DOUBLE, ケース25 DOUBLE, " &
            "PL01 DOUBLE, PL02 DOUBLE, PL03 DOUBLE, PL04 DOUBLE, PL05 DOUBLE, " &
            "PL06 DOUBLE, PL07 DOUBLE, PL08 DOUBLE, PL09 DOUBLE, PL10 DOUBLE, " &
            "PL11 DOUBLE, PL12 DOUBLE, PL13 DOUBLE, PL14 DOUBLE, PL15 DOUBLE, " &
            "PL16 DOUBLE, PL17 DOUBLE, PL18 DOUBLE, PL19 DOUBLE, PL20 DOUBLE, " &
            "PL21 DOUBLE, PL22 DOUBLE, PL23 DOUBLE, PL24 DOUBLE, PL25 DOUBLE, " &
            "容積01 DOUBLE, 容積02 DOUBLE, 容積03 DOUBLE, 容積04 DOUBLE, 容積05 DOUBLE, " &
            "容積06 DOUBLE, 容積07 DOUBLE, 容積08 DOUBLE, 容積09 DOUBLE, 容積10 DOUBLE, " &
            "容積11 DOUBLE, 容積12 DOUBLE, 容積13 DOUBLE, 容積14 DOUBLE, 容積15 DOUBLE, " &
            "容積16 DOUBLE, 容積17 DOUBLE, 容積18 DOUBLE, 容積19 DOUBLE, 容積20 DOUBLE, " &
            "容積21 DOUBLE, 容積22 DOUBLE, 容積23 DOUBLE, 容積24 DOUBLE, 容積25 DOUBLE, " &
            "重量01 DOUBLE, 重量02 DOUBLE, 重量03 DOUBLE, 重量04 DOUBLE, 重量05 DOUBLE, " &
            "重量06 DOUBLE, 重量07 DOUBLE, 重量08 DOUBLE, 重量09 DOUBLE, 重量10 DOUBLE, " &
            "重量11 DOUBLE, 重量12 DOUBLE, 重量13 DOUBLE, 重量14 DOUBLE, 重量15 DOUBLE, " &
            "重量16 DOUBLE, 重量17 DOUBLE, 重量18 DOUBLE, 重量19 DOUBLE, 重量20 DOUBLE, " &
            "重量21 DOUBLE, 重量22 DOUBLE, 重量23 DOUBLE, 重量24 DOUBLE, 重量25 DOUBLE)"

            Using cmdCreateT500 As New OleDbCommand(createT500Sql, conn)
                cmdCreateT500.ExecuteNonQuery()
            End Using

        End Using

        MySQL = "INSERT INTO T500_データモデル ( モデル連番 ) SELECT T250_進行.進行連番 FROM T250_進行 LEFT JOIN T500_データモデル ON T250_進行.進行連番 = T500_データモデル.[モデル連番] WHERE (((T500_データモデル.[モデル連番]) Is Null));"
        SQL実行(MySQL)

    End Sub

    Private Sub 全出荷Rb_CheckedChanged(sender As Object, e As EventArgs) Handles 全出荷Rb.CheckedChanged
        If 画面Chk = 0 Then Exit Sub
        'MsgBox("現バージョンは全出荷に固定")
        全出荷Rb.Checked = True
    End Sub

End Class